package br.com.webservicedelivery.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.webservicedelivery.domain.Funcionarios;
import br.com.webservicedelivery.util.HibernateUtil;

public class FuncionariosDAO {

	public void salvar(Funcionarios funcionarios) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		Transaction transacao = null;

		try {
			transacao = sessao.beginTransaction();
			sessao.save(funcionarios);
			transacao.commit();

		} catch (RuntimeException ex) {
			if (transacao != null) {
				transacao.rollback();
			}
			throw ex;

		} finally {

			sessao.close();

		}
	}

	@SuppressWarnings("unchecked")
	public List<Funcionarios> listar() {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		List<Funcionarios> funcionario = null;

		try {
			Query consulta = sessao.getNamedQuery("Funcionarios.listar");
			funcionario = consulta.list();

		} catch (RuntimeException ex) {
			throw ex;
		} finally {
			sessao.close();
		}

		return funcionario;
	}

	public Funcionarios buscarPorId(Long id) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		Funcionarios funcionarios = null;

		try {
			Query consulta = sessao.getNamedQuery("Funcionarios.buscarPorId");
			consulta.setLong("id", id);

			funcionarios = (Funcionarios) consulta.uniqueResult();

		} catch (RuntimeException ex) {
			throw ex;
		} finally {
			sessao.close();
		}

		return funcionarios;
	}

	public void excluir(Funcionarios funcionarios) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		Transaction transacao = null;

		try {
			transacao = sessao.beginTransaction();
			sessao.delete(funcionarios);
			transacao.commit();

		} catch (RuntimeException ex) {
			if (transacao != null) {
				transacao.rollback();
			}
			throw ex;

		} finally {

			sessao.close();

		}
	}
		public void editar(Funcionarios funcionarios) {
			Session sessao = HibernateUtil.getSessionFactory().openSession();
			Transaction transacao = null;

			try{
				transacao = sessao.beginTransaction();
				
				
				sessao.update(funcionarios);
				transacao.commit();

			} catch (RuntimeException ex) {
				if (transacao != null) {
					transacao.rollback();
				}
				throw ex;

			} finally {

				sessao.close();

			}
		}
		public Funcionarios autenticar(String cpf, String senha) {
			Session sessao = HibernateUtil.getSessionFactory().openSession();
			Funcionarios funcionarios = null;

			try {
				Query consulta = sessao.getNamedQuery("Funcionarios.autenticar");
				consulta.setString("cpf", cpf);
				consulta.setString("senha", senha);

				funcionarios = (Funcionarios) consulta.uniqueResult();

			} catch (RuntimeException ex) {
				throw ex;
			} finally {
				sessao.close();
			}

			return funcionarios;
		}
	}
	
